

namespace Study202 {


  /**
   * 
   */
  class Person {

    // 1. 
    // name: string
    // age: number
    // sex: string


    // 声明和赋值合并
    // 一次性声明赋值需要加上 访问修饰符 ，如果不加就是普通的形参
    // 如果参数过多，且应用场景很复杂，建议把参数定义放到 constructor 外边
    constructor(
      public age = 22,
      public name = '长生',
      public sex = '男'
    ) { }


    // 以上构造函数写法 等价于 以下代码段 constructor2
    constructor2(age = 22, name = '长生', sex = '男') {

      this.age = age
      this.name = name
      this.sex = sex
      // 可以直接输出形参
      console.log(age);
      // 可以直接输出属性值
      console.log(this.age);

    }

    // 给方法类型
    sayHi(): void {
      console.log(`${this.name}说：在座的各位，都是人才!`);
    }

  }


  // 限制对象的类型
  const pc1: Person = new Person()

  pc1.sayHi()


}
